package com.zyx.javademo.exception;

/**
 * @author Yaxi.Zhang
 * @since 2021/9/28 17:29
 * desc: try catch 尝试捕获多线程异常
 * reference: https://honeypps.com/java/java-multi-thread-of-uncaught-exception-handler/
 * 当单线程的程序发生一个未捕获的异常时我们可以采用 try...catch 进行异常的捕获, 但是在多线程环境中,
 * 线程抛出的异常是不能用 try...catch 捕获的, 这样就有可能导致一些问题的出现,
 * 比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等
 */
public class NoCaughtThread {
    public static void main(String[] args) {
        try {
            Thread thread = new Thread(new Task());
            thread.start();
        } catch (Exception e) {
            // 可以看到在多线程中通过try...catch试图捕获线程的异常是不可取的
            // Thread的run方法是不抛出任何检查型异常的, 但是它自身却可能因为一个异常而被中止, 导致这个线程的终结
            System.out.println("==Exception: " + e.getMessage());
        }
    }
}

class Task implements Runnable {
    @Override
    public void run() {
        System.out.println(3 / 2);
        System.out.println(3 / 0);
        System.out.println(3 / 1);
    }
}